package com.jt.controller;

import java.util.List;

import com.jt.anno.CacheFind;
import com.jt.service.ItemCatService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import com.jt.pojo.ItemCat;
import com.jt.vo.EasyUITree;

@RestController
@RequestMapping("/item/cat")
public class ItemCatController {

	@Autowired
	private ItemCatService itemCatService;

	/**
	 * 1.url地址: /item/cat/queryItemName
	 * 2.请求参数: data:{itemCatId:val}
	 * 3.返回值结果: 返回商品分类的名称
	 * 商品分类名称回显
	 */
	@RequestMapping("/queryItemName")
	@CacheFind(key = "ITEM_CAT_NAME")
	public String findItemCatName(Long itemCatId) {
		ItemCat itemCat = itemCatService.findItemCatById(itemCatId);
		return itemCat.getName();
	}



	/**
	 * 业务需求:  查询一级商品分类信息
	 * Sql语句:   SELECT * FROM tb_item_cat WHERE parent_id = 0
	 * url地址:   /item/cat/list
	 * 返回值:    List<EasyUITree>
	 * 实现异步树加载:  id: xxxx
	 * 说明:  当展开一个封闭的节点,才会发起id的参数请求.前提条件是树必须先初始化.
	 * 		  应该先展现一级商品分类信息.
	 * 判断依据: id是否为null.如果为null则表示第一次查询 需要初始化ID  查询一级商品分类目录
	 */
	@RequestMapping("/list")
	public List<EasyUITree> findItemCatList(@RequestParam(value = "id",defaultValue = "0") Long parentId) {
		/*
		 @RequestParam 作用是将请求参数绑定到你控制器的方法参数上（是springmvc中接收普通参数的注解）
		   语法：@RequestParam(value=”参数名”,required=”true/false”,defaultValue=””)
  		   value：参数名
		   required：是否包含该参数，默认为true，表示该请求路径中必须包含该参数，如果不包含就报错。
		   defaultValue：默认参数值，如果设置了该值，required=true将失效，自动为false,如果没有传该参数，就使用默认值

		   当查询一级商品分类信息时，页面不会传parentId的值，所以它的值就为null，此时是查询不到任何数据的
		   我们使用 @RequestParam注解，当页面没有传parentId的值时，给它默认值0，查询一级商品分类信息
		   当查询二级或三级商品分类信息时，parentId已经有值了，所以默认值为0不起作用，这时再进行下一步的查询
		 */

		/**
         * 使用三元运算
		 * 如果id为空就赋值为0
         * 查询所有的一级菜单
         * 不为空再根据页面传过来的id进行子菜单查询

		Long parentId=(id==null?0:id);
		return itemCatService.findItemCatByParentId(parentId);*/

		//通过redis缓存获取数据
		//return itemCatService.findItemCatByRedis(parentId);

		return itemCatService.findItemCatByParentId(parentId);
	}
}
